26. 其他注意事项

观察这些形状

你需要检查传入模型和其他代码的张量形状是否正确。在调试和开发过程中使用 .shape 方法。

如果网络训练效果不好,检查以下几个事项:

在训练循环中使用 optimizer.zero_grad() 清理梯度。如果执行验证循环,使用 model.eval() 将网络设为评估模式,再使用 model.train() 将其设为训练模式。

CUDA 错误

有时候你会遇到这个错误:

RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor for argument #1 ‘mat1’

第二个类型是 torch.cuda.FloatTensor,这意味着它是已经移到 GPU 的张量。它想获得类型为 torch.FloatTensor 的张量,但是没有 .cuda,因此该张量应该在 CPU 上。PyTorch 只能对位于相同设备上的张量进行运算,因此必须同时位于 CPU 或 GPU 上。如果你要在 GPU 上运行网络,一定要使用 .to(device) 将模型和所有必要张量移到 GPU 上,其中 device"cuda""cpu"